#include "Source_CPgrid/mesh.hpp"
#include "Source_parameter/parameter.hpp"
#include "Source_RBF_Interpolation/RBF_Interpolation.h"

void cp2msh(CPgrid& test, char* out);
void fgrid2msh(finiteGrid& k, vector<cphex> &hexdata, vector<cpoint> &pdata, const char* out);
void fgrid2vtk(vector<cphex> hexdata, vector<cpoint> pdata, const char* out);

int main(int argc,char **argv) {
    //输入路径
    string in_path = "..\\main\\input\\GridA\\";

    //输入的base网格
    string input_base = in_path + "baseGrid.out";
    //输入的fine网格
    string input_fine = in_path + "fineGrid.out";
    //输入的属性文件
    string prop = in_path + "Props.txt";
    //输入的断层文件
    string fault = in_path + "faults.txt";
    
    //输出路径
    string out_path = "..\\main\\output\\";
    //输出的vtk文件
    string out_vtk = out_path + "FA.vtk";

    //原始角点网格
    CPgrid grid;
    //使用fine网格和base网格共同初始化CPgrid
    grid.init(input_fine.c_str(), input_base.c_str());
    //标记断层点
    grid.mark_fault(fault.c_str());
    //读取属性文件
    grid.read_properties((char *)prop.c_str());

    //GridA
    //对于模型A，建议平均单元尺寸为100
    finiteGrid fgrid(grid,200);
    
    //对于模型A，延拓要求对应接口参数如下
    fgrid.extent(0.1,0.1, 5, 5, 4, 4, 1200, -1000);

    //GridB
    //对于模型B，建议平均单元尺寸为20
    //finiteGrid fgrid(grid, 20);
    //对于模型B，延拓要求对应接口参数如下
    //fgrid.extent(0.1, 0.1, 5, 5, 4, 4, 1050, 400);

    //低质量单元优化结果
    fgrid.optimize();

    //属性插值

    rbf_interp::Interp(grid, fgrid, 27);


    //输出结果文件
    fgrid2vtk(fgrid.hexdata, fgrid.pdata,out_vtk.c_str());
    return 0;
}